BASE = ../

ODIR = $(BASE)obj/
CODE = $(BASE)code/
TOOLS = $(BASE)tools/
TEST = $(BASE)test/

MKL = /work1/soft/intel2015/composer_xe_2015.2.164/mkl/lib/intel64

HFILE = $(CODE)linear_algebra.h $(CODE)HyperAlgebra.h $(CODE)random.h
COFILE = $(ODIR)linear_algebra.o $(ODIR)mutex_bar.o $(ODIR)vecmat.o $(ODIR)random.o
COOFILE = $(ODIR)HyperAlgebraCore.o $(ODIR)AlgebraMKL.o $(ODIR)HyperAlgebraRandom.o
TestOFile = $(TEST)main.o

EXTERNLIB = -lHyperAcc
EXTERN = ../extern/lib

#ARCH = -arch=sm_80

libHyperAlgebra.a: $(COOFILE) 
	ar -rcv $(BASE)libHyperAlgebra.a  $(COOFILE) 

libHyperAlgebraOld.a: $(COFILE) $(COOFILE) 
	ar -rcv $(BASE)libHyperAlgebraOld.a  $(COFILE) $(COOFILE) 



$(ODIR)linear_algebra.o:$(CODE)linear_algebra.cpp $(HFILE)
	g++ -o $(ODIR)linear_algebra.o -c -O3  $(CODE)linear_algebra.cpp

$(ODIR)HyperAlgebraCore.o:$(CODE)HyperAlgebraCore.cpp $(HFILE)
	g++ -o $(ODIR)HyperAlgebraCore.o  -c -O3 $(CODE)HyperAlgebraCore.cpp

$(ODIR)AlgebraMKL.o:$(CODE)AlgebraMKL.cpp $(HFILE)
	g++ -o $(ODIR)AlgebraMKL.o  -c -O3 $(CODE)AlgebraMKL.cpp

$(ODIR)HyperAlgebraRandom.o:$(CODE)HyperAlgebraRandom.cpp $(HFILE)
	g++ -o $(ODIR)HyperAlgebraRandom.o  -c -O3 $(CODE)HyperAlgebraRandom.cpp



$(ODIR)mutex_bar.o:$(CODE)mutex_bar.cpp $(HFILE)
	g++ -o $(ODIR)mutex_bar.o  -c -O3 $(CODE)mutex_bar.cpp

$(ODIR)random.o:$(CODE)random.cpp $(HFILE)
	g++ -o $(ODIR)random.o -c -O3 $(CODE)random.cpp

$(ODIR)vecmat.o:$(CODE)vecmat.cpp $(HFILE)
	g++ -o $(ODIR)vecmat.o  -c -O3 $(CODE)vecmat.cpp

test.exe:$(COFILE) $(COOFILE) $(TestOFile)  
	g++ -o $(TEST)test.exe $(COFILE) $(COOFILE) $(TestOFile) -lm -lpthread -L $(MKL) -lmkl_rt -L$(EXTERN) $(EXTERNLIB)

$(TEST)main.o: $(HFILE) $(TEST)main.cpp
	g++ -o $(TEST)main.o -c -O3 $(TEST)main.cpp




.PHONY: clean
clean:
	rm $(ODIR)*.o
	rm $(TEST)*.o







